package dataAccessObjects;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Query;

import entidades.Paciente;

public class PacienteDAO {

    EntityManager em;

    public void CreatePaciente(EntityManagerFactory emf, Paciente paciente) {
        try {
            em = emf.createEntityManager();
            em.getTransaction().begin();
            em.persist(paciente);
            em.flush();
            em.getTransaction().commit();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            em.close();
        }
    }

    public Paciente ReadPaciente(EntityManagerFactory emf, int id) {
        em = emf.createEntityManager();
        Paciente paciente = new Paciente();
        em.getTransaction().begin();

        try {
            Query query = em.createQuery("SELECT paciente FROM Paciente paciente WHERE paciente.mDocumento = " + id);
            paciente = (Paciente) query.getSingleResult();
            em.getTransaction().commit();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            em.close();
        }
        return paciente;
    }

    public void UpdatePaciente(EntityManagerFactory emf, int id, Paciente paciente) {
        try {
            em = emf.createEntityManager();
            em.getTransaction().begin();
            Paciente pacienteNuevo = em.find(Paciente.class, id);
            pacienteNuevo.setmDocumento(id);
            pacienteNuevo.setmNombre(paciente.getmNombre());
            pacienteNuevo.setmApellido(paciente.getmApellido());
            em.merge(pacienteNuevo);
            em.getTransaction().commit();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            em.close();
        }

    }

    public Paciente DeletePaciente(EntityManagerFactory emf, int id) {
        Paciente pacienteABorrar = new Paciente();
        Paciente paciente = ReadPaciente(emf, id);
        try {
            em = emf.createEntityManager();
            em.getTransaction().begin();
            pacienteABorrar = em.find(Paciente.class, id);
            em.remove(pacienteABorrar);
            em.getTransaction().commit();
        } finally {
            em.close();
        }
        return paciente;
    }

    public ArrayList<Paciente> getAll(EntityManagerFactory emf) {
        em = emf.createEntityManager();
        ArrayList<Paciente> listaPacientes = new ArrayList<Paciente>();
        em.getTransaction().begin();

        try {
            Query query = em.createQuery("SELECT paciente FROM Paciente paciente");
            List lst = query.getResultList();
            Iterator it = lst.iterator();
            while (it.hasNext()) {
                Paciente paciente = (Paciente) it.next();
                listaPacientes.add(paciente);
            }
            em.getTransaction().commit();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            em.close();
        }
        return listaPacientes;
    }
}
